package karaoke.mobil.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import karaoke.excepcion.DAOExcepcion;
import karaoke.json.ClienteProductoRespuesta;
import karaoke.json.CustomGenericResponse;
import karaoke.modelo.Producto;
import karaoke.modelo.Reserva;
import karaoke.modelo.ReservaProducto;
import karaoke.negocio.GestionPedido;
import karaoke.negocio.GestionProducto;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("mobil")
public class InicioMobilController {

	@RequestMapping(method = RequestMethod.GET)
    public String obtenerPaginaInicio() {
    	return "/mobil/index";
	}
	
	@RequestMapping(value="/producto/buscar", method = RequestMethod.GET)
    public String obtenerPaginaPedidoBuscar() {
    	return "/mobil/producto_buscar";
	}
	
	@RequestMapping(value="/producto/lista", method = RequestMethod.POST)
    public @ResponseBody List<Producto> listaProductos(@RequestParam("nombre") String nombre){
		GestionProducto gestion= new GestionProducto();
		List<Producto> res= new ArrayList<Producto>();
		
		try {
			res=gestion.buscarPorNombre(nombre);
		} catch (DAOExcepcion e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return res;
	}
	

	@RequestMapping(value="/producto/carrito", method = RequestMethod.GET)
    public @ResponseBody List<ReservaProducto> listaProductosPedidos(HttpServletRequest request,HttpServletResponse response){
		HttpSession session = request.getSession();
		
		List<ReservaProducto> res = (List<ReservaProducto>)session.getAttribute("reservaList");
		if(res==null){
			res= new ArrayList<ReservaProducto>();
		}
		
		
		return res;
	}
	
	@RequestMapping(value="/producto/confirmar", method = RequestMethod.GET)
    public @ResponseBody CustomGenericResponse listaProductosPedidosConfirmar(HttpServletRequest request,HttpServletResponse response){
		HttpSession session = request.getSession();
		GestionPedido gestion= new GestionPedido();
		CustomGenericResponse res = new CustomGenericResponse();
		try{
		List<ReservaProducto> listaResevaProducto = (List<ReservaProducto>)session.getAttribute("reservaList");
		gestion.ReservarProducto(listaResevaProducto);
    	// Success. Return a custom response
		res.setSuccess(true);
		res.setMessage("Action successful!");
		session.removeAttribute("reservaList");
    	return res;
    		
		  
		 } catch (DAOExcepcion e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				res.setSuccess(false);
				res.setMessage("Action failure!");
	    		return res;
	    		// :(
				
		}
		
		
	}
	
	
	@RequestMapping(value="/producto/add", method = RequestMethod.POST)
    public @ResponseBody List<ReservaProducto> addProducto(@RequestParam("id") String id,
    		@RequestParam("cantidad") String cantidad,HttpServletRequest request,HttpServletResponse response
    		){
		HttpSession session = request.getSession();
		GestionPedido gesPedido= new GestionPedido();
		
		
		GestionProducto gestion= new GestionProducto();
		
		List<ReservaProducto> reservaList = (List<ReservaProducto>)session.getAttribute("reservaList");
				
		try {
			 Reserva reserva= gesPedido.obtenerReserva("00-50-56-C0-00-01");
			 
			if(reservaList==null){
				reservaList= new ArrayList<ReservaProducto>();				
			}
			
			System.out.println("reserva" + reserva.getIdreserva());
			
			Producto producto= new Producto();
			producto=gestion.obtener(Integer.valueOf(id) );
			if(producto!=null){
				ReservaProducto reservaProducto= new ReservaProducto();
				
				for(ReservaProducto r :reservaList){
					if(r.getProducto().getIdproducto()==producto.getIdproducto()){
						r.setCantidad(r.getCantidad() + Integer.valueOf(cantidad));
						r.setPrecio(producto.getPrecio());
						r.setReserva(reserva);
						session.setAttribute("reservaList", reservaList);
						return  reservaList;
					}
				}
				reservaProducto.setPrecio(producto.getPrecio());
				reservaProducto.setProducto(producto);
				reservaProducto.setReserva(reserva); 
				reservaProducto.setCantidad(Integer.valueOf(cantidad));
				reservaList.add(reservaProducto);
			}
			
			
			
			session.setAttribute("reservaList", reservaList);
			
		} catch (DAOExcepcion e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			
			for(ReservaProducto r :reservaList){
				System.out.println("Producto :"+ r.getProducto().getNombre() + " precio"+r.getProducto().getPrecio()+" cantidad " + r.getCantidad());
			}
		}
		return reservaList;
	}
	
	
	
}
